时间点

时间点指的是一个固定的日期或时间。与时间点有关的问题,比如从给定的日期时间中提取年、月、日或时间等。[大谦Excel,dqexcel点com]

从给定日期时间中提取单位对应的数字

【问题描述】

给定日期时间数据,提取年、月、日、小时、分钟或秒对应的数字。

【示例6-1】

本例使用的Excel文件的完整路径为“D:/Samples/ch06/时间点/提取单位对应的数字/提取生日.xlsx”。该文件打开后如图6-1所示,要求从“出生日期”列提取月份和日期,以”m月n日“的形式添加到“生日”列。

Document Image

图6-1 出生日期

  • 编写下面的代码:
code.python
import pandas as pd
# 定义Excel文件路径
file_path = "D:/Samples/ch06/时间点/提取单位对应的数字/提取生日.xlsx"
# 使用pandas读取Excel文件数据,引擎为openpyxl,读取第一个工作表
df = pd.read_excel(file_path, engine="openpyxl", sheet_name=0)
# 通过apply方法遍历每一行数据,从"出生日期"列提取月份和日期,以"m月n日"形式添加到新的"生日"列
df["生日"] = df["出生日期"].apply(lambda x: str(x.month) + "月" + str(x.day) + "日")
# 输出前5行数据,包含新增的"生日"列信息
print(df.head(5))

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出提取生日后的数据。

code.python
>>> == RESTART: D:/Samples/1.py =
    姓名       出生日期     生日
0   李青 1987-08-20  8月20日
1   王涛 1988-10-02  10月2日
2  赵晓燕 1990-07-30  7月30日
3   何源 1989-02-18  2月18日
4  杜胜军 1979-11-09  11月9日

【知识点扩展】

使用数据类型为日期时间数据类型的Series对象的month属性提取某月,用day属性提取某日,如本例所示。

code.python
df["生日"] = df["出生日期"].apply(lambda x: str(x.month) + "月" + str(x.day) + "日")

其他,可以用year属性获取某年,用hour属性获取某小时,用minute属性获取某分,用second属性获取某秒。

apply方法的使用,请参见3.1.3小节通过数据转换得到新列的内容。

计算给定日期是星期几

【问题描述】

给定一个日期,计算这一天是星期几。

【示例6-2】

本例使用的Excel文件的完整路径为“D:/Samples/ch06/时间点/星期几/值班安排.xlsx”。该文件打开后如图6-2所示,计算“值班日期”列的日期是星期几。

Document Image

图6-2 值班日期

  • 编写下面的代码:
code.python
import pandas as pd
# 读取Excel文件中的数据,并通过”openpyxl”参数指定引擎为openpyxl
df = pd.read_excel(‘D:/Samples/ch06/时间点/星期几/值班安排.xlsx’,
                   sheet_name=’Sheet1’, engine=’openpyxl’, nrows=5)
# 计算“值班日期”列的日期是星期几,把得到的数字添加到”星期“列
df[‘星期’] = df[‘值班日期’].dt.dayofweek + 1
# 输出修改后的表数据
print(df)

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出添加“星期”列后的数据。

code.python
>>> == RESTART: D:/Samples/1.py =
姓名       值班日期  星期
0  孙小雨 2022-08-20   6
1   苏婷 2022-08-22   1
2   黄毅 2022-08-25   4
3  吴海波 2022-08-27   6
4   杜伊 2022-08-29   1

【知识点扩展】

使用Series对象的.dt.dayofweek属性获取日期对应的星期几数据。注意代码中在该数据的基础上加了1,因为获取的星期几数据是基于0的,即星期一对应的数字是0,所以要加上1。